iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
Security

零知識證明-走進PLONK世界系列 第 28

[Day28] 零知識證明-走進PLONK世界: 預處理步驟

  • 分享至 

  • xImage
  •  

預處理步驟

透過使用設定流程,可以取得到證明者和驗證者的公共參數。
如果一個電路有數量為 d 的門,則多項式最多有 d 次數(degree)。需要注意的是,如果驗證者希望能夠驗證證明,則需要有足夠的時間來讀取相關電路。
當驗證者讀取電路時,就表示驗證者演算法需要在電路大小的線性時間內執行,所以這會是一個大問題。
另外在應用中,處理的多項式可能會很大,有機會可以達到10億次方之類。
如果我們讓驗證者在電路大小的線性時間內執行,這就不會有一個簡潔證明的效果,換言之,就不是SNARK了。

要做到 SNARK 的標準,就需要讓驗證者演算法在電路大小的對數時間內運作。
但以對數時間運作就表示驗證者甚至不知道電路到底是什麼樣子!這怎麼可能?

由於多項式的次數可以與電路的大小(門的數量)相對應,所以我們不能讓驗證器只讀取多項式的係數來理解它。
我們需要給他一個總結,讓驗證者只在一個點上評估多項式。該點由驗證者自己隨機選擇。

這是必要的,因為如果我們想要一個簡潔的證明,評估證明大小和驗證者時間就需要是多項式次數的對數。
更具體地說,我們需要一些可以作為電路總結的參數。為此,我們需要使用多項式承諾方案讓證明者透過使用非常短的字串來提交多項式證明(承諾)。

預處理步驟很重要,因為它是為證明者和驗證者產生參數的演算法,並允許驗證者在電路 C 大小的對數時間內運行。

更準確地說,通過預處理的步驟,驗證器可以對電路進行總結並驗證任意點的評估,而無需了解電路的完整描述。
預處理步驟涉及一種演算法,而該演算法將電路和一些隨機值作為輸入的參數。
透過這個初始設定,可以創建一個非常短的電路總結(會是一個字串),並讓驗證者能夠透過該字串知道電路總結。
這樣預處理允許驗證者在電路大小的對數時間內讀取電路。

預處理參數系統採用 3 種演算法: 分別是設定演算法、驗證演算法、證明演算法。當正在輸入時,證明者會採用證明者的公共參數、證人和聲明。
驗證者取得驗證者的公共參數、證明和聲明。

要建立設置,需要有以下設定:

  1. 使用透明設定。不需要任何秘密數據,每個人都可以執行安裝程式並驗證安裝是否正確運行。而且不存在危險洩漏的可能性。不過,在這情況下,證明通常都是比較大。
  2. 為特定電路建立可信任設定。在這情況下,當設定程式運行並處理這些隨機位元時,就需要對證明者保密這些位元。否則證明者可以利用該協議,然後產出一個包含虛假陳述的證明。對於每個電路,都需要重新運行設定過程,並且每次都對這些隨機位元保密(最後在預處理設定完成後即時銷毀它們)。證明比較短,但是比較麻煩。
  3. 創建一個可靠的通用設定。在這情況下,設定是能夠更新的,隨機位元不是特定於電路的。我們只處理這種隨機性一次。這比前一種情況更安全,因為洩漏危險資訊的風險降低了。針對這部分的演算法可以分成兩部分如下:
    3.1. 初始化過程:
    此步驟會使用隨機位元來建立一些全域參數。這是一個一次性的過程,在初始化過程完成後,就會毀滅相關的隨機位元。
    而這部分只會執行一次,因為在過程中是不會將電路作為輸入參數。另外,會使用全域參數的目的只是為了導出證明者和驗證者的參數。然而,這種分開的任務,可以減低初始化過程的危險程度,因為它只是執行一次。
    3.2. 索引過程:
    這部分是一個確定性演算法,它利用了全域參數及電路,然後為證明者和驗證者產出公共參數。
    而且每個使用者都可以根據公共參數以確定性的方式為驗證者和證明者建立公共參數。

當完成所有設定,就可以正式進入下一步。


上一篇
[Day27] 零知識證明-走進PLONK世界: 多項式承諾的選擇
下一篇
[Day29] 零知識證明-走進PLONK世界: PlonK 演算法(第一輪)
系列文
零知識證明-走進PLONK世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言